// PROGRAMA : IDCPE002
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA: 01/07/92
// OBJETIVO : EMISSAO DE DOCUMENTOS (COPIA DE PRONTUARIO). "EPP"
// ATUALIZACOES DATA
// PROGRAMA : IDCPE002 27/10/1997
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// : ALTERACAO DE TELA E ACERTO DE DATA PARA ANO 2000
// EM 01/10/1999
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpe002Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcte002;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.DidHistorico;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.model.Sisldat8;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.model.Tablele;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpe002 OBJETIVO : EMISSAO DE DOCUMENTOS (COPIA DE PRONTUARIO). "EPP" *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/idcpe002")
public class Idcpe002 {
	// Views utilizadas
	DidCadastro vwDidcad = new DidCadastro();
	DidHistorico vwDidhis = new DidHistorico();
	SicControle vwDvecon = new SicControle();
	// Telas/relatorios utilizados
	Idcte002 idcte002;
	Idcpe002Report report;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	Sisldat8 sisldat8 = new Sisldat8();
	Sisll001 sisll001 = new Sisll001();
	Tablele tablele = new Tablele();
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Idcpe002 idcpe002Anterior;
	String faseproc = "0";

	// private long regger = 0;
	private int cpo = 006;
	private int esttip = 99;
	private int qde = 01;
	// ALTERADO O NUMERO DO DOCUMENTO NDEMID(N11) PARA NDEMID(N12)
	// O NUMERO DO DOCUMENTO E COMPOSTO POR:
	// MINUTO-SEGUNDO-MES-DIA-ANO
	// 99 99 99 99 99 < ANTES
	private long ndemid = 0;
	// 99 99 99 99 9999 < O ANO AGORA E COM 4 BYTES (ATUAL)
	private int datn = 0;
	private String codano = "";
	private String codpro = "";
	private String codsex = "";
	private String comuna = "";
	private String estciv = "";
	private String nacion = "";
	private String numpos = "";
	private String tipdoc = "";
	private String comuex = "";
	private String codcut = "";
	private String corolh = "";
	private String corcab = "";
	private String tipcab = "";
	private String ordens = "";
	private String comuen = "";
	private String endere = "";
	private String comple = "";
	private String tidoem = "";
	private String codpor = "";
	private int datnas = 0;
	private String chassi = "";
	private int datemi = 0;
	// ATERAR DATEMI(N6) PARA DATEMI(N8)
	private int datexp = 0;
	private int datnat = 0;
	private String nomant = "";
	private String dtnt = "";
	private String pais = "";
	private String portar = "";
	private String descel = "";
	private int i = 0;
	private String[] tabs = { "", "A", "B", "AB", "O" };
	private String tipsan = "";
	private String fatorh = "";
	private long valorpago = 0;

	private Idcte002 preMapas() throws ParseException {
		idcte002 = new Idcte002(true, sessao);
		idcte002.setDataCorrente(UtilBean.obtemDataDia());
		idcte002.setNomeClasse(this.getClass().getSimpleName().toUpperCase());

		idcte002.setConf("S");
		// Par�grafo: r0()
		return idcte002;
	}

	public Idcpe002(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Idcte002 idcte002) {
		try {
			return main(idcte002);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
		return null;
	}

	private InputStreamDownload main(Idcte002 pidcte002) throws Exception {
		if (pidcte002 == null) {
			primeiraVez = true;
			// idcte002 = new Idcte002 (primeiraVez);
			idcte002 = preMapas();
			idcte002.setNavegar("../idcpe002/executar");
			result.include("idcte002", idcte002);
			sessao.setAtributo("IDCPE002", this);
			idcte002.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(pidcte002);
		}

		// DEFINE PRINTER(EFM = 1)
		// Set time
		// RELATORIO 1 PS=60 LS=81 SG=OFF
		report = new Idcpe002Report(sessao);
		report.setPageSize(60);
		report.setLineSize(81);
		datn = UtilBean.obtemDataCorrente();
		report.setDataCorrente(UtilBean.obtemDataDia());
		report.setTimx(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));

		idcte002.receberTela(false, result);
		Calendar c = Calendar.getInstance();
		int min = c.get(Calendar.MINUTE);
		int seg = c.get(Calendar.SECOND);
		int mm = c.get(Calendar.MONTH) + 1;
		int dd = c.get(Calendar.DAY_OF_MONTH);
		int aa = c.get(Calendar.YEAR);
		report.setNdemid((min * (long) 10000000000L) + (seg * 100000000) + (mm * 1000000) + (dd * 10000) + aa);
		// PARA NDEMIDE(N12)
		// PARA NDEMIDE(N11)
		// COMPUTE NDEMID = ((MIM * 100000000) + (SEG * 1000000)
		// (DATN.MM * 10000) + (DATN.DD * 100) + DATN.AA)

		if (!(idcte002.getConf().equals("S") || idcte002.getConf().equals("N"))) {
			idcte002.enviarMensagem("conf", "");
			result.include("idcte002", idcte002);
			sessao.setAtributo("IDCPE002", this);
			idcte002.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}
		if (idcte002.getConf().equals("N")) {
			result.include("idcte002", idcte002);
			sessao.setAtributo("IDCPE002", this);
			idcte002.enviarTela(true, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		funcoes.tabsemi(sessao);

		if (vwDidcad.consultaNumeroRg(idcte002.getRegger())) {
			if (!vwDidcad.getNomeAnterior().trim().equals("")) {
				report.setNomant("NOME ANTERIOR:");
			}
			report.setRegger(idcte002.getRegger());
			report.setDatnas(vwDidcad.getDataNasc());
			report.setDatnas((int) funcoes.sissd002(report.getDatnas()));
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 001);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "A", vwDidcad.getNomeMunicipioIdent());
			tablele.resp = funcoes.sisst001(1, vwDidcad.getNomeMunicipioIdent(), tablele.resp);
			descel = tablele.resp;
			comuna = UtilBean.concatena(descel, " ", vwDidcad.getUfMunicipioNasc());
			if (vwDidcad.getCodigoSexo() == 1) {
				report.setCodsex("MASCULNO");
			} else {
				report.setCodsex("FEMININO");
			}
			if (vwDidcad.getNacionalidadeIdent() == 1) {
				report.setNacion("BRASILEIRO");
			} else {
				report.setPortar("PORT.MIN.");
				report.setPais(" PAIS ORIGEM:");
				tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 209);
				tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getPaisOrigem());
				tablele.resp = funcoes.sisst001(209, vwDidcad.getPaisOrigem(), tablele.resp);
				descel = tablele.resp;
				report.setCodpor(descel);
				report.setDtnt("DATA NATURALIZACAO:");
				report.setDatnat(vwDidcad.getDataNaturalizacao());
				report.setDatnat((int) funcoes.sissd002(report.getDatnat()));
				if (vwDidcad.getNacionalidadeIdent() == 2) {
					report.setNacion("NATURALIZADO");
				} else {
					report.setNacion("NAT/PORTUGUES");
				}
			}
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 202);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "A", vwDidcad.getEstadoCivil());
			tablele.resp = funcoes.sisst001(202, vwDidcad.getEstadoCivil(), tablele.resp);
			descel = tablele.resp;
			report.setEstciv(descel);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 207);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getNumeroPosto());
			tablele.resp = funcoes.sisst001(207, vwDidcad.getNumeroPosto(), tablele.resp);
			descel = tablele.resp;
			report.setNumpos(descel);
			// TABELA DE TIPO DE DOCUMENTO
			// 1-CERT. NASCIMENTO
			// 2-CERT. CASAMENTO
			// 3-CERT. NATURALIDADE
			// 4-CERT. DIR. E DEVERES
			// 5-SEPARACAO JUDICIAL
			// 6-DIVORCIADO
			// 7-DESQUITADO
			switch (vwDidcad.getTipoDocumento()) {
			case 1: {
				report.setTipdoc("CERT. NASCIMENTO    ");
				break;
			}
			case 2: {
				report.setTipdoc("CERT. CASAMENTO     ");
				break;
			}
			case 3: {
				report.setTipdoc("CERT. NATURALIDADE  ");
				break;
			}
			case 4: {
				report.setTipdoc("CERT. DIR. E DEVERES");
				break;
			}
			case 5: {
				report.setTipdoc("SEPARACAO JUDICIAL  ");
				break;
			}
			case 6: {
				report.setTipdoc("DIVORCIADO          ");
				break;
			}
			case 7: {
				report.setTipdoc("DESQUITADO          ");
				break;
			}
			default: {
				report.setTipdoc("NAO IDENTIFICADO    ");
			}
			}
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 001);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getCodigoMunicipioExp());
			tablele.resp = funcoes.sisst001(1, vwDidcad.getCodigoMunicipioExp(), tablele.resp);
			descel = tablele.resp;
			comuex = UtilBean.concatena(descel, " ", vwDidcad.getUfMunicipioExp());
			report.setDatexp(vwDidcad.getDataExp());
			report.setDatexp((int) funcoes.sissd002(report.getDatexp()));
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 001);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getCodigoMunicipio());
			tablele.resp = funcoes.sisst001(1, vwDidcad.getCodigoMunicipio(), tablele.resp);
			descel = tablele.resp;
			comuen = UtilBean.concatena(descel, " ", vwDidcad.getUfMunicipio());
			endere = UtilBean.concatena(vwDidcad.getEnderecoIdent(), " ", vwDidcad.getNumeroResidencia());
			report.setEndere(endere);
			comple = UtilBean.concatena(vwDidcad.getComplementoEndereco(), " ", vwDidcad.getNomeBairro());
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 201);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getCodigoProfissao());
			tablele.resp = funcoes.sisst001(201, vwDidcad.getCodigoProfissao(), tablele.resp);
			descel = tablele.resp;
			report.setCodpro(descel);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 203);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getCodigoCutis());
			tablele.resp = funcoes.sisst001(203, vwDidcad.getCodigoCutis(), tablele.resp);
			descel = tablele.resp;
			report.setCodcut(descel);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 204);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getCodigoCorOlhos());
			tablele.resp = funcoes.sisst001(204, vwDidcad.getCodigoCorOlhos(), tablele.resp);
			descel = tablele.resp;
			report.setCorolh(descel);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 205);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getCodigoCorCabelo());
			tablele.resp = funcoes.sisst001(205, vwDidcad.getCodigoCorCabelo(), tablele.resp);
			descel = tablele.resp;
			report.setCorcab(descel);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 206);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getCodigoTipoCabelo());
			tablele.resp = funcoes.sisst001(206, vwDidcad.getCodigoTipoCabelo(), tablele.resp);
			descel = tablele.resp;
			report.setTipcab(descel);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 0, 3, "N", 212);
			tablele.pesq = UtilBean.moveSubstring(tablele.pesq, 3, 12, "N", vwDidcad.getNumeroOrdem());
			tablele.resp = funcoes.sisst001(212, vwDidcad.getNumeroOrdem(), tablele.resp);
			descel = tablele.resp;
			report.setOrdens(descel);
			if (vwDidcad.getTipoSangue() > 0) {
				i = vwDidcad.getTipoSangue();
				report.setTipsan(tabs[i]);
			}
			if (vwDidcad.getFatorRh() == 1) {
				report.setFatorh("+");
			}
			if (vwDidcad.getFatorRh() == 2) {
				report.setFatorh("-");
			}

			vwDvecon.setNumeroChassi(String.valueOf(idcte002.getRegger()));
			vwDvecon.setNumeroDocumento(report.getNdemid());
			vwDvecon.setTipoDocumento(89);
			vwDvecon.grava();
			vwDvecon.fecha();

			funcoes.estna001(cpo, esttip, qde, sessao.getSisgsisp().getVar(), idcte002.getMatric());

			formataRelatorio();

			// RELATORIO
			report.gravaRelatorio(1);
			report.gravaRelatorio(2);
			report.gravaRelatorio(3);

			chassi = UtilBean.moveSubstring("", 0, 13, "N", vwDidcad.getNumeroRg());
			while (vwDvecon.pesquisaNumeroChassi(chassi)) {
				if (!(vwDvecon.getTipoDocumento() == 88)) {
					continue;
				}
				report.setDatemi(vwDvecon.getDataEmissao());
				// INVERSAO DE DATAS
				report.setDatemi((int) funcoes.sissd002(report.getDatemi()));

				// RELATORIO
				report.gravaRelatorio(4);
			}
			vwDvecon.fecha();
			// RELATORIO
			report.gravaRelatorio(5);
			report.gravaRelatorio(6);

			idcte002.setMensagemSaida(UtilBean.concatena("EMISSAO DOCUMENTO:", idcte002.getRegger(), " EFETUADA OK"));

			return report.imprimir();
		}
		if (vwDidcad.registrosProcessados() == 0) {
			idcte002.setMensagemSaida(UtilBean.concatena("EMISSAO DOCUMENTO P/RG:", idcte002.getRegger(), " NAO CADASTRADO"));
		}
		sessao.setAtributo("IDCPE002", this);
		result.include("idcte002", idcte002);
		idcte002.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());

		return null;
	}

	private void restaurarEstados(Idcte002 pidcte002) {
		this.idcpe002Anterior = (Idcpe002) sessao.getAtributo("IDCPE002");
		if (pidcte002 != null) {
			idcte002 = pidcte002;
		} else {
			idcte002 = this.idcpe002Anterior.idcte002;
		}
		idcte002.setSessao(sessao);
		this.faseproc = this.idcpe002Anterior.faseproc;
	}

	private void formataRelatorio() throws ParseException {
		report.setDiacntDestin(vwDvecon.getDestinoSolicitacao());
		report.setDiaideAnudir(vwDidcad.getAnularDireito());
		report.setDiaideAnuesq(vwDidcad.getAnularEsquerdo());
		report.setDiaideInddir(vwDidcad.getIndicadorDireito());
		report.setDiaideIndesq(vwDidcad.getIndicadorEsquerdo());
		report.setDiaideMeddir(vwDidcad.getMedioDireito());
		report.setDiaideMedesq(vwDidcad.getMedioEsquerdo());
		report.setDiaideMindir(vwDidcad.getMinimoDireito());
		report.setDiaideMinesq(vwDidcad.getMinimoEsquerdo());
		report.setDiaideNomant(vwDidcad.getNomeAnterior());
		report.setDiaideNomcar(vwDidcad.getNomeCartorio());
		report.setDiaideNomide(vwDidcad.getNomeIdent());
		report.setDiaideNommae(vwDidcad.getNomeMae());
		report.setDiaideNompai(vwDidcad.getNomePai());
		report.setDiaideNsecao(vwDidcad.getNumeroSecao());
		report.setDiaideNumcer(vwDidcad.getNumeroCertidao());
		report.setDiaideNumfol(vwDidcad.getNumeroFolha());
		report.setDiaideNumliv(vwDidcad.getNumeroLivro());
		report.setDiaideNuzona(vwDidcad.getZonaEleitoral());
		report.setDiaideObserv(vwDidcad.getObservacaoAdocao());
		report.setDiaideObserv1(vwDidcad.getObserv1());
		report.setDiaidePoldir(vwDidcad.getPolegarDireito());
		report.setDiaidePolesq(vwDidcad.getPolegarEsquerdo());
		report.setDiaideRegiao(vwDidcad.getRegiaoMilitar());
		report.setDiaideUfpcnh(vwDidcad.getUfCnh());
		report.setDiaideUfrant(vwDidcad.getUfRegAnterior());
		report.setDiaideUftitu(vwDidcad.getUfTituloEleitor());
		report.setDiaideVcivil(vwDidcad.getVaraCivil());
		report.setDiaideZonaof(vwDidcad.getZonaOficio());
		report.setDincntNdemid(vwDvecon.getNumeroDocumento());
		report.setDinideAltura(vwDidcad.getAlturaIdent());
		report.setDinideAnopor(vwDidcad.getAnoPortariaMinist());
		report.setDinideCartra(vwDidcad.getNumeroCartTrab());
		report.setDinideCermil(vwDidcad.getNumeroCertificado());
		report.setDinideCodcep(vwDidcad.getCodigoCep());
		report.setDinideNserie(vwDidcad.getNumeroSerieCart());
		report.setDinideNumcpf(vwDidcad.getNumeroCpf());
		report.setDinideNumpor(vwDidcad.getNumeroPortariaMinist());
		report.setDinidePrtcnh(vwDidcad.getNumeroProntuarioCnh());
		report.setDinideRegant(vwDidcad.getRegistroAnterior());
		report.setDinideTitele(vwDidcad.getNumeroTituloEleitor());
		report.setComple(comple);
		report.setComuen(comuen);
		report.setComuex(comuex);
		report.setComuna(comuna);
	}
}
